5009a2b4570474f4588026bc406651b1ba5711be,python/src/com/jetbrains/python/validation/CompatibilityVisitor.java,CompatibilityVisitor,highlightIncorrectArguments,#PyCallExpression#,705
Before Change
}
else {
if (seenPositionalContainer) {
for (LanguageLevel level : myVersionsToProcess) {
if (level.isOlderThan(LanguageLevel.PYTHON35)) {
registerProblem(argument, "Python versions < 3.5 do not allow duplicate *expressions", new PyRemoveArgumentQuickFix());
break;
}
}
}
seenPositionalContainer = true;
After Change
boolean seenKeywordArgument = false;
boolean seenKeywordContainer = false;
boolean seenPositionalContainer = false;
for (PyExpression argument : callExpression.getArguments()) {
if (argument instanceof PyKeywordArgument) {
final String keyword = ((PyKeywordArgument)argument).getKeyword();
if (keywordArgumentNames.contains(keyword)) {
registerProblem(argument, "Keyword argument repeated", new PyRemoveArgumentQuickFix());
}
else if (seenPositionalContainer) {
registerFirst(argument,
"Python versions < 2.6 do not allow keyword arguments after *expression",
new PyRemoveArgumentQuickFix(),
myVersionsToProcess,
level -> level.isOlderThan(LanguageLevel.PYTHON26));
}
else if (seenKeywordContainer) {
registerFirst(argument,
"Python versions < 3.5 do not allow keyword arguments after **expression",
new PyRemoveArgumentQuickFix(),
myVersionsToProcess,
level -> level.isOlderThan(LanguageLevel.PYTHON35));
}
seenKeywordArgument = true;
keywordArgumentNames.add(keyword);
}
else if (argument instanceof PyStarArgument) {
final PyStarArgument starArgument = (PyStarArgument)argument;
if (starArgument.isKeyword()) {
if (seenKeywordContainer) {
registerFirst(argument,
"Python versions < 3.5 do not allow duplicate **expressions",
new PyRemoveArgumentQuickFix(),
myVersionsToProcess,
level -> level.isOlderThan(LanguageLevel.PYTHON35));
}
seenKeywordContainer = true;
}
else {
if (seenPositionalContainer) {
registerFirst(argument,
"Python versions < 3.5 do not allow duplicate *expressions",
new PyRemoveArgumentQuickFix(),
myVersionsToProcess,
level -> level.isOlderThan(LanguageLevel.PYTHON35));
}
seenPositionalContainer = true;
}